﻿Imports System.Data.OleDb
Module DB_Provider
    'Public conn_str As String = "Provider=SQLOLEDB;Data Source=Hung\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=QuanLyThuChi"
    Public conn_str As String = My.Settings.ConnectionString

    Public Function Read(ByVal query As String) As DataTable
        Dim Kq As New DataTable
        ' Khai báo bộ thích ứng 
        Try
            Dim adapter As New OleDbDataAdapter(query, conn_str)
            ' Dùng Bộ thích ứng đọc dữ liệu 
            adapter.FillSchema(Kq, SchemaType.Source)
            adapter.Fill(Kq)
        Catch Loi As CustomException.MyException
            Loi.Show(query, conn_str)
        End Try
        Return Kq
    End Function
    Public Function Read_schema(ByVal table_name As String) As DataTable
        Dim Kq As New DataTable
        Dim query As String = "Select * From " & table_name
        Try
            ' Khai báo bộ thích ứng 
            Dim adapter As New OleDbDataAdapter(query, conn_str)
            ' Dùng Bộ thích ứng đọc dữ liệu 
            adapter.FillSchema(Kq, SchemaType.Source)
        Catch Loi As CustomException.MyException
            Loi.Show(query, conn_str)
        End Try

        Return Kq
    End Function
    Public Function Write(ByVal table As DataTable, ByVal table_name As String) As Integer
        Dim Kq As Integer = 0
        Dim query As String = "Select * From " & table_name
        table.Columns.Item(0).ReadOnly = False
        Try
            Dim adapter As New OleDbDataAdapter(query, conn_str)
            Dim builder As New OleDbCommandBuilder(adapter)
            AddHandler adapter.RowUpdated, AddressOf Update_Identity
            Kq = adapter.Update(table)
        Catch Loi As CustomException.MyException
            Loi.Show(query, conn_str)
        End Try
        Return Kq
    End Function    
    Public Function Exec_Command(ByVal query As String) As Integer
        Dim Kq As Integer
        ' Khai báo bộ thực hiện lệnh 
        Dim conn As New OleDbConnection(conn_str)
        conn.Open()
        Dim command As New OleDbCommand(query, conn)
        ' Sử dụng bộ thực hiện lệnh đọc số lượng các đơn vị
        Kq = command.ExecuteScalar
        conn.Close()
        Return Kq
    End Function

    Private Sub Update_Identity(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)
        ' Lậy kết nối hiện dùng 
        Dim conn As OleDbConnection = e.Command.Connection
        ' Kiểm tra là lệnh chèn vào dòng mới 
        If e.StatementType = StatementType.Insert Then
            ' Khởi tạo lệnh đọc mã số phát sinh tự động của dòng vừa chèn vào 
            Dim command As New OleDbCommand("Select @@IDENTITY", conn)
            ' Thực hiện lệnh để nhận mã số phát sinh tự động 
            Dim Ma_so As Integer
            Integer.TryParse(command.ExecuteScalar().ToString(), Ma_so)
            Try
                e.Row.BeginEdit()
                e.Row(0) = Ma_so
                e.Row.EndEdit()
            Catch ex As Exception
                ex.Message.ToString()
            End Try
            
        End If
    End Sub
End Module
